package czy.demo.controller;


import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * @Secured注解可以指定访问方法所需角色，功能比JSR250注解还要少
 * @Secured注解使用在类上时，如果方法上未使用，则采用类规则
 * @Secured注解同时在类、方法上使用时，方法注解规则覆盖类注解规则
 */
@RestController
@Secured({"ROLE_ADMIN"})
@RequestMapping("/secure")
public class SecureController {

    /**
     * @Secured指定角色必须使用角色全名，即包含ROLE_前缀
     */
    @GetMapping("/user")
    @Secured({"ROLE_USER"})
    public String user(){
        return "PreAuthorize注解的方法，只有USER角色可以访问";
    }

    @GetMapping("/admin")
    @Secured({"ROLE_ADMIN"})
    public String admin(){
        return "PreAuthorize注解的方法，只有ADMIN角色可以访问";
    }

    /* 指定多个角色代表必须具有指定角色之一才能访问 */
    @GetMapping("/or/role")
    @Secured({"ROLE_ADMIN","ROLE_USER"})
    public String anyRole(){
        return "PreAuthorize注解的方法，只有指定角色之一可以访问";
    }

    @GetMapping("/hehe")
    public String hehe(){
        return "这个方法没有注解，使用类注解";
    }

}
